home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / tools / ask / dictk / dictk.his < prev    next >
Encoding:
Text File  |  1998-09-30  |  16.1 KB  |  397 lines

  1. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  2. ┃        ASK3対応 アクセサリシリーズ2                  ┃
  3. ┃            「DicTK」                          ┃
  4. ┃         Copyright (C) 1996-98 by AIG-Soft                  ┃
  5. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  6. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  7. ┃    歴史                                      ┃
  8. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  9.  
  10. 1996/9/10
  11.     WORD POWER V1.1 完成
  12.  
  13. 1996/9/13
  14.     「画面上に出ている単語を登録したい!」と思い、いろいろ考える。
  15.     結局、「画面読み取り」という力技を使うことにする。
  16.     高速フォントマッチングのための手法を考える。
  17.  
  18. 1996/9/14
  19.     全角文字のみに対応した画面読み取り完成。
  20.     読み取り手法が手法だけに、SX上は最初からサポート無し。
  21.     これにASKアクセサリとしてのインターフェースを付ける。
  22.  
  23. 1996/9/15
  24.     今度はそれに辞書登録関係ルーチンを付ける。
  25.     ところが、どうやってもうまく辞書登録出来ない。
  26.     どうもプログラマーズマニュアルはそのあたりの細かい記述が抜けているようだ。
  27.  
  28. 1996/9/16
  29.     askadd.x ver 1.00((c)JOJO/井上博之)を逆アセンブルしてそのあたりを調査。
  30.     ようやく辞書登録エラーの謎が判明。こんな手順が必要ならちゃんと書いておけよ
  31.     SHARP!!(ACCESSか?)
  32.  
  33. 1996/9/17    V1.0
  34.     細かいデバッグをして V1.0完成。
  35.  
  36.     680*0 Freak BBSにて初公開。
  37.  
  38. 1996/9/19    V1.01
  39.     codesの初期化が抜けていたのを追加
  40.     (アクセサリの組み込みに失敗しない限り、ほとんど関係無いけど。)
  41.  
  42. 1996/9/21    V1.1
  43.     MY.X対応(正確には、B_CONSOL対応というべきか)
  44.     画面端でのカーソル移動がうまくいってないのを修正
  45.     スペースは読み飛ばしを変更
  46.      全角スペースという認識はせず、半角スペースとして飛ばすように変更
  47.     単語一気読み取り機能追加
  48.     フォントハッシュファイル名を80文字以上で指定するとおかしくなるのを修正
  49.     ソフトのテストを追加
  50.  
  51. 1996/9/24    V1.11
  52.     一気取り込みだけになっていたのを修正
  53.  
  54. 1996/10/19
  55.     半角対応に向けてプログラム開始
  56.     いろいろな方法を考えたけど、結局半角ルーチンを丸ごと付け加えた方が
  57.     楽そう(だけでなく、処理もすっきりするので遅くなりにくい)なので、
  58.     その方向で追加ルーチンを書き出す。
  59.  
  60.     フォント比較は簡単だけど、他の問題がたいへんだぞ!
  61.     謎のバグも沢山出て、なかなかうまく動かないぞ!!
  62.  
  63. 1996/11/1    V2.0
  64.     半角文字対応
  65.     UNDO : カーソルを元の位置に戻す
  66.     SHIFT+SPACE : スペース入れ機能
  67.     エラーチェック強化(ほんの少しだけ)
  68.     一部処理の最適化
  69.  
  70.     最初はV1.5のつもりだったけど、内部を大幅に書き替えたのでV2に昇格。
  71.  
  72. 1997/2/1    V2.1
  73.     黄色文字対応(TEXT PLANE1対応)
  74.     操作キーの追加(CTRL+←→,SHIFT+→)
  75.     各ルーチンを改良して高速&省メモリー化
  76.     
  77.     従来ROMフォントを読み出してから比較していたのを、ROMフォントの
  78.     アドレスのみIOCSで取得し、そこから直接読むようにする。
  79.     これに伴いワークエリアも不要になり、その他、処理の最適化、不要処理を
  80.     省いてサイズ縮小。
  81.     操作キーなどの処理追加分を入れても小さくなった。
  82.  
  83. 1997/3/17    V2.1a~V2.2
  84.     単語登録開始前に終了した時、カーソル位置がおかしくなるのを修正
  85.     起動時にCTRL+登録がリピートしてすぐ終了してしまうのを解消
  86.     エラーメッセージが間違っていたのを修正
  87.     フォントハッシュが正しいサイズでない時のエラーチェック強化
  88.     フォントハッシュ作成時にエラーが出たとき、そのファイルを削除する
  89.     更に最適化によりサイズ縮小(keepchk.sも改良)
  90.     ドキュメントの大幅改訂(読みやすくした[つもり])
  91.  
  92. 1997/3/23    V2.3
  93.     高位メモリーにワークを取るオプション追加(/H)
  94.     ファイルサイズは増えたけど常駐サイズは変わらず。
  95.  
  96. 1997/3/30    V2.3a
  97.     B_SUPERの戻し処理が間違っていたので修正
  98.     (実はプログラマーズマニュアルの記載ミス。)
  99.  
  100. 1997/6/2    V3.0
  101.     GMD V1に全面依存するように改訂
  102.     (フルアセンブラー化によるほとんど作り直し)
  103.     品詞名を簡略化する
  104.     単語グループを細分化する
  105.     カーソル移動時にカーソルが見えないのを少し解消
  106.  
  107. 1998/6/17~23    V3.01
  108.     ふとしたことでOh!X 1995/7号のP34~を読む。
  109.     むむ、68MPUにはこんな姑息なテクニックがあったとは。
  110.     よし、簡単に採用出来るものだけでも入れてみよう。
  111.     省メモリー+高速化(実際にどれだけ高速化されるかは確認していない)。
  112.     +アクセサリ構造体は、やはり常駐後は不要のようなので非常駐化で省メモリー。
  113.  
  114.     常駐出来ない時のエラーメッセージを追加。
  115.  
  116.     ということで、マイナー改変。
  117.  
  118. 1998/9/30    V3.1
  119.     対応するGMDのバージョンをV1.2に変更した。
  120.     なぜかということは、KSD(GMDじゃないよ)のドキュメントを読むとわかるでしょう。
  121.  
  122.     さらに、今までDicTK実利用時にGMDの常駐チェック&ロックをしていたのを
  123.     常駐時のみに変更。これは、今までのようにDicTK内部に常駐チェックルーチンを
  124.     持つと、今回のように常駐チェック方法が変わった時に大きな変更を伴うからである。
  125.     今回、その常駐チェックを外部に出すことで、今後の変更は外部関数のリンクし直し
  126.     だけで良くなる。
  127.     副作用として、チェックが非常駐部分に移ることで、常駐部分のサイズも減った。
  128.     まあ、DicTKを使うと決めた時点でGMDの常時常駐(変な言い方だけど)
  129.     は決まっているとしても問題ないだろう。
  130.     (今までは、常駐時にはチェックせず、実際の利用時にGMDが存在すれば良かった。)
  131.  
  132. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  133. ┃    技術的な話    (プログラム内部に興味の無い人は飛ばそう!)          ┃
  134. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  135.  
  136. DicExでもいろいろ書いたが、ASK3のアクセサリについてはあの時に多くの
  137. 技術を収得したので、今回は比較的楽だった。今回のメインは何と言っても画面の読み
  138. 取りであろう。ということで、そのあたりを解説しておく。
  139.  
  140. ・・・と、V2までは書いていたが、そのあたりはGMDに移行したのでここでは割愛する。
  141.  
  142.     ・・・
  143.  
  144. もう1つの目玉は、ASKの辞書登録である。これは単純に「FP30を使うだけ」
  145. ではない。前後の処理が必要なのである。
  146.  
  147. 答だけ書いてしまうとこうなる(少なくとも私はこの方法しか見つけられなかった)。
  148.  
  149.     (1) ASKをoffする
  150.     (2) 仮名漢字変換モードをロックする
  151.     (3) 辞書をopenする
  152.     (4) 登録
  153.  
  154. 要点は、仮名漢字変換をロックすること、辞書をopenすること、ASKをoffすること
  155. である。どの1つが抜けても登録できない。特にASKをoffすることについては
  156. マニュアルに書いてないので、要注意である。
  157. これがわかるだけでも半日以上(丸一日か?)かかっている。マニュアルの不備という
  158. ものは、本当に困ったもんである。(このマニュアルに不備がないとは言わないけれど。)
  159.  
  160.     ・・・
  161.  
  162. アクセサリに付いて、補足。
  163.  
  164. ASK3のアクセサリ内では、余り多くのスタックは使えない。
  165.  
  166. ReadCharでは、今までのバージョンではローカルに_FNTBUF fb,fb0を取っていたが、
  167. V2.0でローカル変数が増えた結果、スタックがあふれてしまい、謎の暴走を起こして
  168. いた。この原因をつかむのにかなりの時間を費やしてしまった。
  169.  
  170. どう見ても正しい筈のIOCS FNTGETを呼び出すと暴走するのだ。Cレベルではうまく行く
  171. のだが、.sレベルで暴走するのだ。
  172. いろいろ考えた挙げ句、「ひょっとして・・・」と思ってfb/fb0を固定ワーク
  173. (=スタック上に取らなくする)にするとうまくいくようになった。
  174. 一番わかりにくいバグである。
  175.  
  176. アクセサリルーチン内では、DOS/IOCSを呼び出さない場合にはもう少し使えるが、
  177. DOS/IOCSを呼び出す時には、それらが使うスタックも考慮する必要があるため、
  178. ユーザールーチン内では100バイト前後だと思っていた方がいいようだ。
  179. それ以上使いたい時には、.dcや.dsで確保する。
  180.  
  181. V3ではスタックの利用量が増えたか減ったかわからないので、とりあえず
  182. 独自のスタックを設定している。ちなみにこれはスーパーバイザー用のスタックである。
  183.  
  184.     ・・・
  185.  
  186. 更に追記。
  187. アクセサリの起動キーにTABは使えないようである。
  188. そのため、TAB相当のカーソル移動をSHIFT+→にしている。
  189. これはそういう制約だからしかたない。
  190. ちなみに、SHIFT判定の方が早いので、CTRL+SHIFT+→のときはCTRLが無視される。
  191.  
  192. 久しぶりにソースを触ると忘れている。改良したつもりでバグが出る出る。
  193. やはり、たまに触らないと、特にアセンブラーでのプログラム作成は腕が鈍る。
  194.  
  195. V2.1では以前「それほどしていない」と書いたソースの最適化をかなり進めた。
  196. 元がCの吐き出したソースだから、最適化の余地があるのは元もとだが、さらに、
  197. アセンブラレベルでの最適化、一部サブルーチン化なども含めてかなり行った。
  198. ソース的には見にくくなった部分もあるが、このお蔭でファイルレベルで260バイト、
  199. 実行時は100バイト以上の省メモリーができた。
  200. (大きく削られたのが非常駐部分だから、実行時の方が少ない。)
  201. この手のプログラムにしては、かなり大きな省メモリーだと思う。
  202.  
  203.     ・・・V2.3a
  204.  
  205. ところで、IOCS _B_SUPERで、すでにスーパーバイザーモードにいる時に
  206. 再びそうしようとした時のエラーコード、プログラマーズマニュアル(New Kitならp440)
  207. ではD0.l=1となってるけど、これは-1の間違いである。
  208. =1で処理を書くと、エラーになってしまう。DOS SUPERも<0がエラーだから、
  209. 間違いないと思うけど。
  210.  
  211. いえ、DicTKでは実際にはユーザーモードでしか呼ばれないのでエラーは出ないんだけど、
  212. 他のプログラムで場合によってスーパーバイザーになるところでエラーが出るもんだから、
  213. 調べたらやっぱりそうだった。
  214.  
  215. ずっと前からこう書いてあるぞ、SHARP!!
  216.  
  217.     ・・・V3・・・
  218.  
  219. V3ではGMD対応に合わせてメインルーチンが減ったので、一気に全面書き直しを行った。
  220. 今まではGCCの作ったソースに手をいれていたが、今回はCのソースを見ながら
  221. ハンドアセンブルしたのである。そのためにルーチンが非常に読みやすく分かりやすくなった。
  222. Cと処理の進め方が若干異なる部分もあるが、わかりにくいことはないだろう。
  223.  
  224. アクセサリの実験中にわかったこと。
  225. ASKからアクセサリにキーの処理が移ってきている時はCTRL+OPT.1+DELによる
  226. リセットが効かない。それすら1つのキーとして処理されてしまうのだ。
  227. そう、BREAKOFFの効き目である。従って、暴走してもリセットスイッチしか効かない。
  228. ちょっと困ったもんである。
  229.  
  230. はまりがちなバグ。
  231.     if (c==NOT_ASCII|TOUROKU_KEY) break;
  232.     if (c==(NOT_ASCII|TOUROKU_KEY)) break;
  233. 上下の2行は似ているようで違う。実は下が正解で上はだめ。
  234. Cの演算子の優先順位によるものだ。このバグのためにかなりかかってしまった。
  235. 思い込みによるバグというものは、なかなか発見出来ないので厄介である。
  236. もう1人、デバッグ要員がいればなぁ。
  237.  
  238. DicTK開発中の最大のバグは、リンクの問題であった。
  239. たしかGMDでも引っかかった問題だが、今回は出方がスタックオーバーによるそれに
  240. 近かったためにずっとスタックの問題だと思っていた。
  241.  
  242. 外部からリンクされたルーチンはプログラム後部=非常駐部分=常駐後はワークエリアと
  243. なって潰される部分に存在する。ということは、当然常駐後に呼び出したら暴走するわけだ。
  244. 「おかしな命令」エラーで悩み続け、スタックの問題だと思ってスタックを増減して、
  245. メモリーダンプをして眺めている内にようやくとここに気が付いた。
  246. 発見するまでに丸1週間以上、いや2週間以上か、DicTKの開発期間のほとんどが
  247. このバグのために費やされているといってもいい。
  248. このバグは、メイン部分のソースを見ていても絶対に解らないバグなので要注意だ。
  249.  
  250. しかも、HLKは.o単位ならリンク順を変えられるが、.aのライブラリは必ず後ろに
  251. リンクされてしまうので困った。結局は、利用するライブラリのソースをDicTKの
  252. 中に入れるという反則技をしてしまった。ソースが公開されているからこそ出来る
  253. 技である。常駐/非常駐の区別の有るプログラムだから仕方ないのだが、お勧め出来る
  254. 方法ではない。GMDの常駐チェックをDicTK常駐時の1回だけにすればもっと
  255. 綺麗にはなるのだが、特にテスト中はDicTK/GMD共に常駐したりはずしたり
  256. するから、今の方法にしている。
  257.  
  258. かといって、スタックの問題もないわけではない。
  259. どうやら、DOS KNJCTRLは想像以上にたくさんのスタックを使うらしい。
  260. 気を付けなくてはならない。
  261.  
  262. そうそう、アクセサリの中ではスタック以外のすべてのレジスタを破壊しても
  263. いいようである(破壊しても動いている)。もっとも、d0.wはリターン値として重要だが。
  264.  
  265. あれ、今まで書いていないことがあるぞ。
  266. ASKのアクセサリはスーパーバイザーモードで走る。
  267. だから、カーソルの直接操作などが楽に出来るわけである。
  268.  
  269. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  270. ┃    あとがき                                  ┃
  271. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  272.  
  273. 私は趣味で、50年前に発行された「大阪今昔」という本を打ち込んでいたのですが
  274. (A4にして120頁以上!)、その中の単語のまあ難しいこと、難しいこと。
  275. X68K.DICではあまりに変換出来ないので、WORD POWER辞書をASK3で
  276. 使えるようにしてしまいました。
  277.  
  278. それによりだいぶ改善されたのですが、まだまだの部分もあります。
  279. そうなると後は辞書登録していくしかないのですが、ASKのコマンドラインでの
  280. 辞書登録では、記号入力でしか出せない漢字を登録することが出来ません。
  281. なぜなら、記号入力で出した文字は即確定してしまい、変換ラインに入らないからです。
  282.  
  283.     ・・・V2.2追記・・・
  284.  
  285. と、上のように書いていましたら、「出来る!」という報告をいただきました。
  286. いただきました通りに転記しておきます。
  287. ---------------------------------------------------------------------
  288. 方法 >> 卅壱日 を登録する場合
  289. 1.出ない文字を抜いて変換し、正しい漢字にした後、登録キーを押す
  290.   >> “いちにち”を変換し、“壱日”となった時点で、『登録』キーを押す
  291. 2.登録ラインのカーソルを動かして、壱 に重ねる
  292. 3.『コード入力』キーを押す (← ここが反則)
  293. 4.JIS CODE 5241 迄カーソルを進め、卅 の上で『リターン』キーを押す
  294. 5.卅壱日  が登録ラインに表示される
  295. 6.『リターン』キーを押す
  296. 7.読み方に、 さんじゅういちにち  と入力し、『リターン』キーを押す
  297. 8.ASK3は何事もなかったのように、登録して仕舞う
  298. ---------------------------------------------------------------------
  299. なるほど、こういう手があったとは。まあ、これに気が付かなかったからこそ
  300. DicTKが出来たので、それはそれでよかったのかも知れませんが。
  301. そもそも、コードを探すのが面倒ですしね。
  302.  
  303. それにしても、こんなところまで読んでくれているいる人がいたのですね。
  304. などと、書いておきながらいうやつ。(^^;)
  305.  
  306.     ・・・ありがとうございます・・・
  307.  
  308. だからといって、SX上の辞書メンテ.xを使うのも面倒ですし、コマンドライン上の
  309. 各種辞書登録ソフトでも、やっぱり面倒です。そう、やはりその場で登録出来なくては。
  310.  
  311. そこで作り上げたのが、このリアルタイム辞書登録アクセサリです。
  312. 「何がリアルタイムだ?」と言われそうですが、画面上にあるその単語をその場で、
  313. という位の意味です。深く追求しないように。
  314.  
  315. これで標準の辞書登録機能と合わせ、(ほぼ)どのような場面からでも辞書登録出来る
  316. ようになって、辞書の賢さアップがいっそうはかどるでしょう。
  317. 私もこれでバンバン辞書登録しまくってます。無駄な単語まで登録してたりして。
  318. みなさんも、これで辞書を思いっきり鍛えてください。
  319.  
  320. DicExと同様、キーの配置などは私の趣味です。変更出来ません(^_^;)。
  321. (私は普段ENV3.ASKをちょっとだけ変えたものを使っています。)
  322. どうしてもしたい人は、ソースを直して下さい。
  323. V3ではask3.macによる定数に直したので、変更も楽でしょう、きっと。
  324.  
  325. 今回ほとんど作りなおしましたので、どこかにバグが潜んでいるかも知れません。
  326. 何か見つけた人はご連絡を。
  327. でも、お約束だけど、何があっても「責任取って!」はなしね。
  328.  
  329.     「フリーソフトは使う側の責任で。」
  330.  
  331. さて、次回は何を作ろうか・・・って、決まってるんだけど、すでに「あれ」
  332. を作ることに。
  333.  
  334. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  335. ┃    作成環境                                  ┃
  336. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  337.  
  338. DicTKは次の環境で作成・動作チェックされました。(敬称略)
  339.  
  340.     X68030             (25MHz,12M-Memory,FPU)
  341.     X68000 CompactXVI    (16/10MHz,10M-Memory)
  342.     
  343.     Human68K    V3.02        SHARP/Hudson
  344.     COMMAND.x    v3.00        SHARP/Hudson
  345.     ASK68K.SYS    V3.02        SHARP/ACCESS Co.LTD.
  346.     codeA.sys    V0.05        FDS/SHARP/ACCESS Co.LTD.
  347.     GMD        V1.2        AIG-Soft
  348.     
  349.     HIOCS-plus    V16.11        SHARP/Y.Nakamura/立花えり子
  350.     TwentyOne.sys    v1.36c14+p2     Ext/GORRY/立花えり子
  351.     
  352.     HAS060        v3.09+76    Y.Nakamura/M.Kamada
  353.     HLK evolution    v3.01+11    SALT/立花えり子
  354.     
  355.     askadd.x    v1.00        JOJO/井上博之
  356.     DumpDic3.x    v1.01        h.o(電脳倶楽部)
  357.     
  358.     WS        V0.90        Fuchi
  359.     SuperED.X    v1.18        T.Nishikawa
  360.     EDLINE.X    v1.00        Tk(電脳倶楽部)
  361.     DicTK.Docの「テストしたソフト」の項にあるもの
  362.     
  363.     X68K.DIC            SHARP/ACCESS Co.LTD.
  364.     POST.DIC            SHARP/ACCESS Co.LTD.
  365.     
  366.     その他多くのソフトたち。
  367.  
  368. 特に、ASKはV3.02/codeAはV0.05でのみ確認しています。
  369. ASKのV3.00,3.01では動作するかどうかは未確認です。
  370.  
  371. 各ソフトの開発者に感謝致します。
  372.  
  373. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  374. ┃    参考文献                                  ┃
  375. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  376.  
  377.     XC V2.1 NewKit    拡張マニュアル/Cライブラリマニュアル2
  378.             /プログラマーズマニュアル,SHARP
  379.     日本語入力・辞書ユティリティ ユーザーズマニュアル,SHARP
  380.     Oh!X 1992/3月号,ソフトバンク
  381.     Oh!X 1995/7月号,ソフトバンク
  382.  
  383. ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
  384. ┃    連絡先                                      ┃
  385. ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
  386.  
  387.     PowerStation    PS0071
  388.     満開ネット    MKSX0424
  389.     E-Mail        LeDA@osaka.email.ne.jp
  390.  
  391. 上記ならよく連絡が付きますが、まれにしばらく通信出来なくなることがありますので、
  392. 気長にお待ち下さい。
  393.  
  394.                 LeDA
  395.  
  396. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  397.